extern long evtchn_send(int lport);
extern long do_block(void);
-
-#define VECTOR_DB 1
-#define VECTOR_BP 3
-#define VECTOR_GP 13
-#define VECTOR_PG 14
+void do_nmi(struct xen_regs *, unsigned long);
int start_vmx()
{
intr_fields = (INTR_INFO_VALID_MASK |
INTR_TYPE_EXCEPTION |
INTR_INFO_DELIEVER_CODE_MASK |
- VECTOR_GP);
+ TRAP_gp_fault);
__vmwrite(VM_ENTRY_INTR_INFO_FIELD, intr_fields);
__vmwrite(VM_ENTRY_EXCEPTION_ERROR_CODE, error_code);
}
TRACE_3D(TRC_VMX_VECTOR, ed->domain->id, eip, vector);
switch (vector) {
#ifdef XEN_DEBUGGER
- case VECTOR_DB:
+ case TRAP_debug:
{
save_xen_regs(®s);
pdb_handle_exception(1, ®s, 1);
restore_xen_regs(®s);
break;
}
- case VECTOR_BP:
+ case TRAP_int3:
{
save_xen_regs(®s);
pdb_handle_exception(3, ®s, 1);
break;
}
#endif
- case VECTOR_GP:
+ case TRAP_gp_fault:
{
vmx_do_general_protection_fault(®s);
break;
}
- case VECTOR_PG:
+ case TRAP_page_fault:
{
__vmread(EXIT_QUALIFICATION, &va);
__vmread(VM_EXIT_INTR_ERROR_CODE, &error_code);
intr_fields = (INTR_INFO_VALID_MASK |
INTR_TYPE_EXCEPTION |
INTR_INFO_DELIEVER_CODE_MASK |
- VECTOR_PG);
+ TRAP_page_fault);
__vmwrite(VM_ENTRY_INTR_INFO_FIELD, intr_fields);
__vmwrite(VM_ENTRY_EXCEPTION_ERROR_CODE, error_code);
ed->arch.arch_vmx.cpu_cr2 = va;
}
break;
}
+ case TRAP_nmi:
+ do_nmi(®s, 0);
+ break;
default:
__vmx_bug(®s);
break;